package com.hhkj.admin.student.service.biz;

import com.hhkj.admin.course.domain.Course;
import com.hhkj.admin.course.model.req.CourseReq;
import com.hhkj.admin.student.domain.Student;
import com.hhkj.admin.student.domain.StudentBatch;
import com.hhkj.admin.student.domain.StudentCourse;
import com.hhkj.admin.student.model.dopo.StudentBatchPo;
import com.hhkj.admin.student.model.dopo.StudentPo;
import com.hhkj.admin.student.model.req.StudentBatchReq;
import com.hhkj.admin.student.model.req.StudentCourseReq;
import com.hhkj.admin.student.model.req.StudentReq;
import com.hhkj.admin.student.model.res.StudentBatchRes;
import com.ruoyi.common.base.biz.service.biz.BaseBizService;

import java.util.List;

/**
 * 学员批次BizService接口
 *
 * @author ruoyi
 * @since 2023-06-08
 */
public interface StudentBatchBizService extends BaseBizService<StudentBatch, StudentBatchReq, StudentBatchRes> {

    /**
     * 查询学员批次管理列表
     *
     * @param studentBatchReq 学员批次管理
     * @return 学员批次管理集合
     */
    List<StudentBatchPo> selectStudentBatchList(StudentBatchReq studentBatchReq);

    /**
     * 批量删除学员批次管理
     *
     * @param idList 需要删除的学员批次管理主键集合
     * @return 结果
     */
    boolean removeStudentBatchByIdList(List<Long> idList);

    /**
     * 学员批次缴费
     *
     * @param studentBatchReq 入参
     * @return boolean 是否成功更改
     */
    boolean payBatch(StudentBatchReq studentBatchReq);

    /**
     * 修改缴费情况
     *
     * @param studentBatch 传参
     * @return
     */
    boolean updatePay(StudentBatchReq studentBatch);

    /**
     * 查询批次下学员列表
     *
     * @param studentBatchReq 批次号id
     * @return 学员
     */
    List<StudentPo> listBatchStudent(StudentBatchReq studentBatchReq);

    /**
     * 校验给定的科目是否属于同一个类别
     *
     * @param course 科目id list
     * @return boolean true属于同一类别
     */
    boolean verifyCourseCategory(CourseReq course);

    /**
     * 批量设置题库类型
     *
     * @param studentCourseReq 传参
     */
    void supplyBatchBankType(StudentCourseReq studentCourseReq);


    /**
     * 批量审核学员
     *
     * @param student 传参
     */
    void checkBatchStudent(StudentReq student);

    /**
     * 批量设置到期日期
     *
     * @param studentCourseReq 传参
     */
    void supplyBatchLineDate(StudentCourseReq studentCourseReq);

    /**
     * 批量设置学员单价
     *
     * @param studentCourseReq 传参
     */
    void supplyBatchStudentUnitPrice(StudentCourseReq studentCourseReq);

    /**
     * 导出批次下学员的数据
     *
     * @param studentBatchReq 传参
     * @return
     */
    StudentBatch exportStudent(StudentBatchReq studentBatchReq);


    /**
     * 统计批次下全部学员的缴费总金额
     *
     * @param batchId 批次id
     * @return 缴费总金额
     */
    StudentBatchRes countBatchStudentPrice(Long batchId);

    /**
     * 解绑微信
     *
     * @param studentBatchReq 传参
     * @return 影响行数
     */
    int cancelBind(StudentBatchReq studentBatchReq);
}
